// 当我们在代码中用对象表示实体时，就是所谓的 面向对象编程（特征就是属性，行为就是方法），简称为 “OOP”。

// **************************************************************************************************

// 【方法中的 this】

let user = {
	name: 'Ben',
	age: 27,
	// 对象中的函数被称为方法，方法可以省略 function 关键字，进行简写。
	sayHi() {
		// this 指的是当前对象。
		console.log(this.name)
	},
}

// 函数内 this 的值就是在点之前的这个对象，即调用该方法的对象。
user.sayHi() // Ben

// **************************************************************************************************

// 【this 不受限制】
function sayHi() {
	console.log(this) // 在没有对象的情况下调用。严格模式下 this 值 为 undefined；非严格模式下 this 值 为 window。
	console.log(this.name) // undefined
}

// sayHi()

// **************************************************************************************************

// 【箭头函数没有自己的 “this”】
let users = {
	firstName: 'Ilya',
	sayHi() {
		// 箭头函数中的 this 取决于外部“正常的函数”。
		let arrow = () => console.log(this.firstName)
		arrow() // Ilya
	},
}

users.sayHi()

// **************************************************************************************************

// 总结：
// this 的值是在代码运行时计算出来的。this 的值就是在点之前的这个对象，即调用该方法的对象。
